<?php
/**
 * 视图加载控制器，需要显示的页面需加载此控制器
 *
 * Created by PhpStorm.
 * User: li
 * Date: 15-10-9
 * Time: 下午7:19
 */

class MY_View_Controller extends MY_Web_Controller{
    /**
     * 视图布局名称(layout)
     *
     * @var string
     */
    protected $_layout = 'main';
    /**
     * 赋值给view的数据
     *
     * @var array
     */
    private $_data = array();

    function __construct(){
        parent::__construct();
    }

    function get_login_user($key=false){
        if($key){
            return $this->_login_user[$key];
        }
        return $this->_login_user;
    }
    /**
     * 给视图赋值
     *
     * @param string $key 要赋值的变量名称
     * @param mix    $val 变量的值
     */
    public function assign($key, $val)
    {
        $this->_data[$key] = $val;
    }

    /**
     * 调用视图，显示
     *
     * @param string $file 视图文件地址
     */
    public function display($file = '')
    {
        if($file == '') {
            if ($this->router->directory) {
                if (empty($this->module)) {
                    $file = $this->router->directory;

                } else {
                    $str = substr(
                        $this->router->directory,
                        strpos($this->router->directory, 'controllers')
                    );
                    $str = substr($str, 12);
                    $file = $str;
                }
            }
            $file .= $this->router->class . '/'. $this->router->method;
        }

        $layout_file = 'layouts/'. $this->_layout .'.php';
        //调用页面前的调用
        $this->before_display();

        $content = $this->load->view($file, $this->_data, true);

        if (!is_file($this->get_views_path() . $layout_file)) {
            echo $content;
        } else {
            $this->load->view($layout_file, array('layout_content' => $content));
        }
    }

    //在显示页面前，要处理的代码,在具体的controller里面重写
    protected function before_display()
    {

    }

    /**
     * 设置布局模板名称
     *
     * @param string $layout_name
     */
    public function set_layout($layout_name = '')
    {
        $this->_layout = $layout_name;

    }

    /**
     * 获取视图地址
     *
     * @return string
     */
    public function get_views_path() {
        if ($this->router->module == '') {
            return APPPATH . 'views/';
        } else {
            return APPPATH . 'modules/' . $this->router->module . '/views/';
        }
    }


    /**
     * 显示提示信息操作
     *
     * 所显示的提示信息并非完全是错误信息。如：用户登陆时用户名或密码错误，可用本方法输出提示信息
     *
     * 注：显示提示信息的页面模板内容可以自定义. 方法：在项目视图目录中的error子目录中新建message.html文件,自定义该文件内容
     * 显示错误信息处模板标签为<!--{$message}-->
     *
     * 本方法支持URL的自动跳转，当显示时间有效期失效时则跳转到自定义网址，若跳转网址为空则函数不执行跳转功能，当自定义网址参数为-1时默认为:返回上一页。
     * @access public
     * @param string $message       所要显示的提示信息
     * @param string $goto_url      所要跳转的自定义网址
     * @param int    $limit_time    显示信息的有效期,注:(单位:秒) 默认为2秒
     * @param int    $error_no      显示信息类型，注：0-成功 | 1-失败 | 2 提示
     * @return void
     */
    protected function show_message($message, $error_no=0,$goto_url = null, $limit_time = 2) {

        //参数分析
        if (!$message) {
            return false;
        }

        //当自定义跳转网址存在时
        if (!is_null($goto_url)) {
            $limit_time = 1000 * $limit_time;
            //分析自定义网址是否为返回页
            if ($goto_url == -1) {
                $goto_url = 'javascript:history.go(-1);';
                $message .= '<br/><a href="javascript:history.go(-1);" target="_self">如果你的浏览器没反应,请点击这里...</a>';
            } else{
                //防止网址过长，有换行引起跳转变不正确
                $goto_url = str_replace(array("\n","\r"), '', $goto_url);
                $message .= '<br/><a href="' . $goto_url . '" target="_self">如果你的浏览器没反应,请点击这里...</a>';
            }
            $message .= '<script type="text/javascript">function redirect_url(url){location.href=url;}setTimeout("redirect_url(\'' . $goto_url . '\')", ' . $limit_time . ');</script>';
        }
        $data = array(
            'message' => $message,
            'timer'=>$limit_time/1000,
            'error'=>$error_no
        );
        echo $this->load->view('show_message/index.php', $data, true);
        exit;
    }
}